package com.xijia;

import java.lang.reflect.Constructor;


/**
 * 反射破解单列
 * @author wangsong
 * @mail 1720696548@qq.com
 * @date 2020/9/5 0005 10:23
 * @version 1.0.0
 */
public class Test001 {
    public static void main(String[] args) throws Exception {

        // 使用反射机制创建我们的对象
        Class<?> aClass = Class.forName("com.xijia.Singleton01");
        //  getDeclaredConstructor();获取当前类（不包含父类）,getConstructor 所有的  包含父类构造函数
        Constructor<?> constructor = aClass.getDeclaredConstructor();
        constructor.setAccessible(true);
        // 走无参构造函数 反射创建对象成功
        Singleton01 instance1 = (Singleton01) constructor.newInstance();
        Singleton01 instance2 = Singleton01.getInstance();
        /**
         * 将输出false， 单列对象 Singleton01 被重复创建, singleton01 在静态区的值被重新初始化，原数据将被破坏
         */
        System.out.println(instance1 == instance2);
    }
}
